package com.zt.questionnaire.model.excel.questionnaire;

import com.zt.questionnaire.common.service.HReadExcelFather;
import com.zt.questionnaire.common.utils.NumberUtils;
import com.zt.questionnaire.common.utils.ObjectUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 疾病辩证出结果后再问一些问题，用户的选项会对基础药方进行加减药材
 *
 * @author sy
 */
@Slf4j
@Data
public class QuestionnaireTypeExcel {

    /**
     * 问卷id，一但填写，请勿修改，对应代码中常量
     */
    private int id;

    /**
     * 问卷标题
     */
    private String name;
    /**
     * 简介，若为图片填写图片路径
     */
    private String intro;

    /**
     * 主线问题列表
     */
    private String question_id_list;

    /**
     * 主线问题列表
     */
    private List<String> questionIdList;

    public static Map<Integer, QuestionnaireTypeExcel> load(String[] titleNames, String[][] values) throws Exception {
        boolean is = true;
        Map<Integer, QuestionnaireTypeExcel> map = new HashMap<>();
        List<QuestionnaireTypeExcel> list = HReadExcelFather.load(QuestionnaireTypeExcel.class, titleNames, values);
        for (QuestionnaireTypeExcel base : list) {
            int id2 = base.getId();
            if (id2 == 0) {
                //说明整行数据可能为null，可能是最后一行了，后面后空格的东西，即使不是最后一行，如果id=0，也丢的这条数据
                continue;
            }
            QuestionnaireTypeExcel e = map.get(id2);
            if (e != null) {
                is = false;
                log.error("questionnaire表中type表中id重复，id=" + id2);
                continue;
            }

            map.put(id2, base);

            // 处理问题id，例如：101-107,1c1,108-117,1c2,118-126， 101-107 中间的数据也需要
            List<String> questionIdList = NumberUtils.splitStringList(base.getQuestion_id_list(), ",");
            if (ObjectUtils.isNotEmpty(questionIdList)) {
                List<String> newQuestionIdList = new ArrayList<>();
                for (String id : questionIdList) {
                    // 包含连续的问题id，例如：101-107
                    if (id.contains("-")) {
                        List<Integer> strList = NumberUtils.splitIntList(id, "-");
                        Integer startId = strList.get(0);
                        Integer endId = strList.get(1);
                        for (int i = startId; i <= endId; i++) {
                            newQuestionIdList.add(String.valueOf(i));
                        }
                    } else {
                        newQuestionIdList.add(id);
                    }
                }
                base.setQuestion_id_list(null);
                base.setQuestionIdList(newQuestionIdList);
            }

        }
        if (!is) {
            throw new Exception("excel表格读取错误");
        }
        return map;
    }
}
